//
//  TwitterEngineManager.h
//  TwitterPlane
//
//  Created by kazuyuki takahashi on 09/12/13.
//  Copyright 2009 by invisibledesigner.com. All rights reserved.
//

#import <Cocoa/Cocoa.h>
#import "MGTwitterEngineDelegate.h"

@class MGTwitterEngine;
@class Status;

typedef void (^TwitterEngineCallback)(BOOL succeeded, NSError *error);


/**
 * TwitterEngineへのアクセス・レスポンスの処理を行う
 */
@interface TwitterEngineManager : NSObject <MGTwitterEngineDelegate> {
    MGTwitterEngine *engine_;
    
    //memo: connectionIDの保管が複雑になってきた。どうにかしたい
    NSMutableDictionary *callbacks_;    //key:(NSString*)connectionIdentifier, value:(TwitterEngineCallback)callback
    NSMutableSet *twitConnectionIDs_;   //twit時のconnectionIDを保管しておく。status受信時の区別のため
    NSMutableDictionary *deleteConnectionInfos_; //delete時のconnectionID/statusのmap
    
    unsigned long long lastStatusID_;
    
    NSTimer *autoReloadTimer_;
    
    NSArrayController *statusesController_;
}

/**
 * 取得したステータスを保管するArrayController
 */
@property (assign) NSArrayController *statusesController;
@property (assign, getter=isAutoReloadEnabled) BOOL autoReloadEnabled;

/**
 * インスタンスを取得。
 */
+ (TwitterEngineManager*)defaultManager;

/**
 * タイムラインをロード
 */
- (void)getFollowedTimeline;

/**
 * ロード済みのタイムラインをすべて破棄し、ロードしなおす
 */
- (void)reloadAllFollowedTimeline;

/**
 * つぶやきを送信
 */
- (void)twit:(NSString*)text callback:(TwitterEngineCallback)callback;

- (void)twit:(NSString*)text replyToStatus:(Status*)status callback:(TwitterEngineCallback)callback;

/**
 * 削除
 */
- (void)deleteStatus:(Status*)status callback:(TwitterEngineCallback)callback;

- (void)checkUserCredentials;

@end
